let path = require('path');
let webpack = require('webpack');
const UglifyJsPlugin = require('uglifyjs-webpack-plugin');
const packageInfo = require('./package.json');
/*包大小分析工具*/
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;
const isBuildAll = process.env.NODE_ENV == 'BuildAll' ? true : false;

module.exports = [
	// 未压缩版
	{
		mode: 'production',
		entry: {
			ivcs: './src/index_customer.js',
		},
		output: {
			path: path.resolve(__dirname, 'dist/customer'),
			filename: '[name].js',
			library: 'ivcs',
			libraryTarget: 'umd',
		},
		module: {
			rules: [
				{
					test: /\.(js|ts)$/,
					use: { loader: 'babel-loader' },
					exclude: /node_modules/,
				},
				{
					test: /\.ts$/,
					use: 'ts-loader',
					exclude: /node_modules/,
				}
			],
		},
		resolve: {
			extensions: ['.ts', '.js'],
		},
		//第三方不打包
		//包名地址:全局变量
		externals: {
			// "../base/logger":'Logger',
			// "./socket.io":'io',
			// "./irtc":'IRtc',
			lodash: 'lodash',
		},
		plugins: [
			new webpack.BannerPlugin({
				entryOnly: true, // 是否仅在入口包中输出 banner 信息
				banner: 'Zealcomm IVCS SDK' + `\n` + `Version ${packageInfo.version}` + `\n` + `Author: ${packageInfo.author}` + `\n` + `Date: ${new Date()}`,
			}),
		],
	},

	// 压缩版
	{
		mode: 'production',
		entry: {
			'ivcs.min': './src/index_customer.js',
		},
		output: {
			path: path.resolve(__dirname, 'dist/customer'),
			filename: '[name].js',
			library: 'ivcs',
			libraryTarget: 'umd',
		},
		module: {
			rules: [
				{
					test: /\.(js|ts)$/,
					use: { loader: 'babel-loader' },
					exclude: /node_modules/,
				},
				{
					test: /\.ts$/,
					use: 'ts-loader',
					exclude: /node_modules/,
				}
			],
		},
		resolve: {
			extensions: ['.ts', '.js'],
		},
		externals: {
			// "../base/logger":'Logger',
			// "./socket.io":'io',
			lodash: 'lodash',
		},
		plugins: [
			// new webpack.optimize.UglifyJsPlugin({
			//     compress: {
			//         warnings: false
			//     },
			//     sourceMap: true
			// }),
			new webpack.BannerPlugin({
				entryOnly: true, // 是否仅在入口包中输出 banner 信息
				banner: 'Zealcomm IVCS SDK' + `\n` + `Version ${packageInfo.version}` + `\n` + `Author: ${packageInfo.author}` + `\n` + `Date: ${new Date()}`,
			}),
			new webpack.DefinePlugin({
				'process.env': {
					NODE_ENV: JSON.stringify('production'),
				},
			}),
			new UglifyJsPlugin({
				uglifyOptions: {
					compress: {
						warnings: false,
						drop_console: true, //console
					},
				},
				sourceMap: true,
				parallel: true,
			}),
			new BundleAnalyzerPlugin({
				//  可以是`server`，`static`或`disabled`。
				//  在`server`模式下，分析器将启动HTTP服务器来显示软件包报告。
				//  在“静态”模式下，会生成带有报告的单个HTML文件。
				//  在`disabled`模式下，你可以使用这个插件来将`generateStatsFile`设置为`true`来生成Webpack Stats JSON文件。
				analyzerMode: isBuildAll ? 'disabled' : 'static',
				//  将在“服务器”模式下使用的主机启动HTTP服务器。
				analyzerHost: '127.0.0.1',
				//  将在“服务器”模式下使用的端口启动HTTP服务器。
				analyzerPort: 8888,
				//  路径捆绑，将在`static`模式下生成的报告文件。
				//  相对于捆绑输出目录。
				reportFilename: 'report.html',
				//  模块大小默认显示在报告中。
				//  应该是`stat`，`parsed`或者`gzip`中的一个。
				//  有关更多信息，请参见“定义”一节。
				defaultSizes: 'parsed',
				//  在默认浏览器中自动打开报告
				openAnalyzer: false,
				//  如果为true，则Webpack Stats JSON文件将在bundle输出目录中生成
				generateStatsFile: false,
				//  如果`generateStatsFile`为`true`，将会生成Webpack Stats JSON文件的名字。
				//  相对于捆绑输出目录。
				statsFilename: 'stats.json',
				//  stats.toJson（）方法的选项。
				//  例如，您可以使用`source：false`选项排除统计文件中模块的来源。
				//  在这里查看更多选项：https：  //github.com/webpack/webpack/blob/webpack-1/lib/Stats.js#L21
				statsOptions: null,
				logLevel: 'info', // 日志级别。可以是'信息'，'警告'，'错误'或'沉默'。
			}),
		],
	},
];

// module.exports = {
//     entry: {
//         'sdk': ['./src/index_customer.js']
//     },
//     output: {
//         path: path.resolve(__dirname, 'dist'),
//         filename: '[name].js',
//         library:'SDK',
//         libraryTarget:"umd"
//         /*
//         * libraryTarget
//         * 简单的说明一下这些值的含义
//             var：在当前作用域导出一个变量
//             assign： 导出一个变量作为全局变量
//             this： 导出作为 this 的一个属性，这个 this 不一定是 window ，要看引用 SDK 的位置
//             window： 导出为 window 的一个属性，基本上就算全局变量了
//             global：导出为 global 的一个属性，估计是这个变量名比较常用吧。。
//             commonjs：导出为 exports 的一个属性，导出的格式可以在 CommonJS 环境里引用
//             commonjs2：赋值给 module.exports ，同样可以用在 CommonJS 环境里
//             amd：暴露给 AMD 模块
//             umd：暴露为所有模块都可用的格式
//             jsonp：包裹到一个 jsonp 包装容器中，也就是一个 Function
//         * */
//     },
// }
